// src/utils/tree-utils.ts
import type { TreeNode, EnhancedTreeNode } from '../../core/types/project'

/**
 * 将平铺的树节点数组转换为树形结构
 * @param nodes 平铺的树节点数组
 * @returns 构建好的树形结构
 */
export function buildTree(nodes: TreeNode[]): EnhancedTreeNode[] {
  // 创建节点的映射关系
  const nodeMap = new Map<number, EnhancedTreeNode>()

  // 创建所有节点的基本对象
  nodes.forEach((node) => {
    nodeMap.set(node.id, {
      ...node,
      children: [],
    } as EnhancedTreeNode)
  })

  // 构建树形结构
  const tree: EnhancedTreeNode[] = []

  nodeMap.forEach((node) => {
    // 根节点（没有父节点）
    if (node.pid === null) {
      tree.push(node)
    }
    // 子节点（添加到父节点的children中）
    else if (nodeMap.has(node.pid)) {
      const parent = nodeMap.get(node.pid)!
      if (!parent.children) {
        parent.children = []
      }
      parent.children.push(node)
    }
  })

  return tree
}
